package com.gitee.qdbp.general.common.api.site.model.place;

import java.io.Serializable;
import java.util.Date;
import com.gitee.qdbp.base.annotation.DataIsolation;
import com.gitee.qdbp.base.annotation.OperateTraces;
import com.gitee.qdbp.base.enums.DataState;

/**
 * 位置定义实体类
 *
 * @author zhh
 * @version 171012
 */
@OperateTraces(id = "id")
@DataIsolation("tenantCode")
public class PlaceDefineBean implements Serializable {

    /** 版本序列号 **/
    private static final long serialVersionUID = 1L;

    /** 表名 **/
    public static final String TABLE = "gn_place_define";

    /** 主键 **/
    private String id;

    /** 租户编号 **/
    private String tenantCode;

    /** 分类编号 **/
    private String categoryCode;

    /** 位置编号 **/
    private String placeCode;

    /** 位置名称 **/
    private String placeName;

    /** 内容类型 **/
    private String contentType;

    /** 格式说明 **/
    private PlaceFormatData formatData;

    /** 数量 **/
    private Integer quantity;

    /** 排序值(越小越靠前) **/
    private Integer sortIndex;

    /** 是否显示(不显示则只有开发模式可修改) **/
    private Boolean visible;

    /** 选项 **/
    private PlaceDefineOptions options;

    /** 创建时间 **/
    private Date createTime;

    /** 数据状态:0为正常|其他为删除 **/
    private DataState dataState;

    /** 获取主键 **/
    public String getId() {
        return id;
    }

    /** 设置主键 **/
    public void setId(String id) {
        this.id = id;
    }

    /** 获取租户编号 **/
    public String getTenantCode() {
        return tenantCode;
    }

    /** 设置租户编号 **/
    public void setTenantCode(String tenantCode) {
        this.tenantCode = tenantCode;
    }

    /** 获取分类编号 **/
    public String getCategoryCode() {
        return categoryCode;
    }

    /** 设置分类编号 **/
    public void setCategoryCode(String categoryCode) {
        this.categoryCode = categoryCode;
    }

    /** 获取位置编号 **/
    public String getPlaceCode() {
        return placeCode;
    }

    /** 设置位置编号 **/
    public void setPlaceCode(String placeCode) {
        this.placeCode = placeCode;
    }

    /** 获取位置名称 **/
    public String getPlaceName() {
        return placeName;
    }

    /** 设置位置名称 **/
    public void setPlaceName(String placeName) {
        this.placeName = placeName;
    }

    /** 获取内容类型 **/
    public String getContentType() {
        return contentType;
    }

    /** 设置内容类型 **/
    public void setContentType(String contentType) {
        this.contentType = contentType;
    }

    /** 获取格式说明 **/
    public PlaceFormatData getFormatData() {
        return formatData;
    }

    /** 获取格式说明, force=是否强制返回非空对象 **/
    public PlaceFormatData getFormatData(boolean force) {
        if (formatData == null && force) {
            formatData = new PlaceFormatData();
        }
        return formatData;
    }

    /** 设置格式说明 **/
    public void setFormatData(PlaceFormatData formatData) {
        this.formatData = formatData;
    }

    /** 获取数量 **/
    public Integer getQuantity() {
        return quantity;
    }

    /** 设置数量 **/
    public void setQuantity(Integer quantity) {
        this.quantity = quantity;
    }

    /** 获取排序值(越小越靠前) **/
    public Integer getSortIndex() {
        return sortIndex;
    }

    /** 设置排序值(越小越靠前) **/
    public void setSortIndex(Integer sortIndex) {
        this.sortIndex = sortIndex;
    }

    /** 获取是否显示(不显示则只有开发模式可修改) **/
    public Boolean getVisible() {
        return visible;
    }

    /** 设置是否显示(不显示则只有开发模式可修改) **/
    public void setVisible(Boolean visible) {
        this.visible = visible;
    }

    /** 获取选项 **/
    public PlaceDefineOptions getOptions() {
        return options;
    }

    /** 获取选项, force=是否强制返回非空对象 **/
    public PlaceDefineOptions getOptions(boolean force) {
        if (options == null && force) {
            options = new PlaceDefineOptions();
        }
        return options;
    }

    /** 设置选项 **/
    public void setOptions(PlaceDefineOptions options) {
        this.options = options;
    }

    /** 获取创建时间 **/
    public Date getCreateTime() {
        return createTime;
    }

    /** 设置创建时间 **/
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /** 获取数据状态:0为正常|其他为删除 **/
    public DataState getDataState() {
        return dataState;
    }

    /** 设置数据状态:0为正常|其他为删除 **/
    public void setDataState(DataState dataState) {
        this.dataState = dataState;
    }

    /**
     * 将当前对象转换为子类对象
     *
     * @param clazz 目标类型
     * @return 目标对象
     */
    public <T extends PlaceDefineBean> T to(Class<T> clazz) {
        T instance;
        try {
            instance = clazz.newInstance();
        } catch (Exception e) {
            throw new IllegalArgumentException("Failed to create " + clazz.getSimpleName() + " instance.", e);
        }

        instance.setId(this.getId()); // 主键
        instance.setTenantCode(this.getTenantCode()); // 租户编号
        instance.setCategoryCode(this.getCategoryCode()); // 分类编号
        instance.setPlaceCode(this.getPlaceCode()); // 位置编号
        instance.setPlaceName(this.getPlaceName()); // 位置名称
        instance.setContentType(this.getContentType()); // 内容类型
        instance.setFormatData(this.getFormatData()); // 格式说明
        instance.setQuantity(this.getQuantity()); // 数量
        instance.setSortIndex(this.getSortIndex()); // 排序值(越小越靠前)
        instance.setVisible(this.getVisible()); // 是否显示(不显示则只有开发模式可修改)
        instance.setOptions(this.getOptions()); // 选项
        instance.setCreateTime(this.getCreateTime()); // 创建时间
        instance.setDataState(this.getDataState()); // 数据状态:0为正常|其他为删除
        return instance;
    }

}